// 题目简洁说明：
// 给定n个宝箱，每个宝箱有一个正整数价值。可以选择若干宝箱，要求选中的最大价值与最小价值之差不超过k，
// 求在满足条件下能带走的宝箱总价值最大是多少。
//
// 解题思路：
// 1. 先将所有宝箱价值排序，方便区间处理。
// 2. 枚举每个宝箱作为区间最大值，向左扩展，保证最大值-最小值<=k，统计区间和。
// 3. 每次更新最大总价值，最后输出答案。


#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
int a[N];
int n, k;

int main() {
    cin >> n >> k;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    sort(a + 1, a + n + 1); // 先排序，方便区间处理
    int ans = 0;
    // 枚举以a[i]为最大值的区间
    for (int i = 1; i <= n; i++) {
        int sum = 0;
        // 从a[i]向左扩展，直到最大-最小>k为止
        for (int j = i; j >= 1; j--) {
            if (a[i] - a[j] <= k) { // 满足最大-最小<=k
                sum += a[j];        // 累加区间内宝箱价值
            } else break;           // 超出范围，停止扩展
        }
        ans = max(ans, sum); // 更新最大总价值
    }
    cout << ans << "\n"; // 输出结果
    return 0;
}
